package cn.com.executor;

import cn.com.task.TaskDemo;

import java.util.concurrent.*;

/**
 * 定时线程池
 */
public class ScheduledThreadMainTest {


    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //这里的poolSize指的是同一个时间点可以执行的并发任务数，并不代表任务总数
        ScheduledExecutorService pool = Executors.newScheduledThreadPool(2);

        //单线程池
        //ScheduledExecutorService pool = Executors.newSingleThreadScheduledExecutor();

        //scheduleWithFixedDelay 计算执行时间是在上个任务执行结束后的时间开始计算
        pool.scheduleWithFixedDelay(new TaskDemo(1), 1, 5, TimeUnit.SECONDS);

        //scheduleAtFixedRate 计算执行时间是在上个任务调度的时间开始计算
        pool.scheduleAtFixedRate(new TaskDemo(2), 1, 5, TimeUnit.SECONDS);

        //周期任务并不会阻塞主线程
        //注意：任务执行遇到异常会停止调用后续任务，并且不会打印异常信息
        System.out.println("程序走到此");
    }
}
